//
// This software is now distributed according to
// the Lesser Gnu Public License. Please see
// http://www.gnu.org/copyleft/lesser.txt for
// the details.
// -- Happy Computing!
//
package com.stevesoft.pat;

/**
 * This class makes it easy to create your own patterns and integrate them into
 * Regex. For more detail, see the example file <a
 * href="http://javaregex.com/code/deriv2.java.html">deriv2.java</a> or <a
 * href="http://javaregex.com/code/deriv3.java.html">deriv3.java</a>.
 */
public class Validator {

	String argsave = null;
	String pattern = ".";

	/**
	 * This method does extra checking on a matched section of a String
	 * beginning at position start and ending at end. The idea is that you can
	 * do extra checking with this that you don't know how to do with a standard
	 * Regex. If this method is successful, it returns the location of the end
	 * of this pattern element -- that may be the value end provided or some
	 * other value. A negative value signifies that a match failure. By default,
	 * this method just returns end and thus does nothing.
	 * 
	 * @see com.stevesoft.pat.Regex#define(java.lang.String,java.lang.String,com.stevesoft.pat.Validator)
	 */
	public int validate(StringLike src, int start, int end) {
		return end;
	}

	/*
	 * This method allows you to modify the behavior of this validator by making
	 * a new Validator object. If a Validator named "foo" is defined, then the
	 * pattern "{??foo:bar}" will cause Regex to first get the Validator given
	 * to Regex.define and then to call its arg method with the string "bar". If
	 * this method returns a null (the default) you get the same behavior as the
	 * pattern "{??foo}" would supply.
	 */
	public Validator arg(String s) {
		return null;
	}

	/**
	 * For optimization it is helpful, but not necessary, that you define the
	 * minimum number of characters this validator will allow to match. To do
	 * this return new patInt(number) where number is the smallest number of
	 * characters that can match.
	 */
	public patInt minChars() {
		return new patInt(0);
	}

	/**
	 * For optimization it is helpful, but not necessary, that you define the
	 * maximum number of characters this validator will allow to match. To do
	 * this either return new patInt(number), or new patInf() if an infinite
	 * number of characters may match.
	 */
	public patInt maxChars() {
		return new patInf();
	}
}
